Solutions for Comp248 Assignment 5

#ifndef REPORTAR_H 
#define REPORTAR_H  

#include<fstream.h>
#include<iostream.h>
#include"tstring.h"
#include"iomanip.h"
#include"textlib.h"

 
class Reportar
{	
	private:
	
	String  fileName;
	int numEntries;		

	public:
		
	Reportar(String file);
	void filesOp();
	double totalIt( int As1, int As2 , int MidT , int Final);
	String getGrade(double function);

};



Reportar::Reportar (String file):fileName(file)
{}


void Reportar::filesOp()
{
	
	String fileIn,fileOut;
	ifstream fin;
	ofstream fout;

	

	fileIn=fileName;

	fileOut=fileIn+".out";

	fin.open(fileIn.c_str(), ios::in|ios::nocreate);
	fout.open(fileOut.c_str());

	if(!fin)
	{
		cerr<<" Failed to Open "<<fileName<<endl;
		exit(1);
	}
	else
	{
		cout<<endl;
		cout<<" Input file   : "<<fileIn<<" "<<endl;
		cout<<" Output file  : "<<fileOut<<" "<<endl;
		
		for(int i=0;i<=4;i++)
			{
				for(int j=0;j<=i;j++)
				{
					cout<<" .";
				}
			}
	cout<<endl;
	cout<<endl;
	}

	fout<<" File's Name: "<<fileOut<<endl<<endl;
	fout<<"  ID\t "<<" A1\t"
		<<"A2\t "<<" MT\t"<<"FE\t "<<"Total\t"<<"Grade"
		<<endl;

	fout<<"---------------------------------------------"<<endl;
		
	fin>>numEntries;

	String ID[40];
	int A1[40],A2[40],MT[40], 
		FE[40];
	double resTot;

	double sumA1=0.0,sumA2=0.0,sumMT=0.0,
		   sumFE=0.0,sumTot=0.0;

	int count=0;
	while(count != numEntries)
	{
		fin>> ID[count]>>A1[count]>>A2[count]>>MT[count]
			>>FE[count];
		resTot=totalIt(A1[count],A2[count],MT[count],FE[count]);

		fout<<ID[count]<<setw(6)<<A1[count]<<setw(6)<<A2[count]
			<<setw(6)<<MT[count]<<setw(6)<<FE[count]
			<<setreal(8,1)<<resTot
			<<'\t'<<"  "
			<<getGrade(resTot)
			<<endl;

		sumA1+=A1[count];
		sumA2+=A2[count];
		sumMT+=MT[count];
		sumFE+=FE[count];
		sumTot+=resTot;

		count++;

	}

	fout<<"---------------------------------------------"<<endl;
	fout<<"Averages:"<<setreal(5,1)<<sumA1/numEntries
		<<setreal(6,1)<<sumA2/numEntries<<setreal(6,1)
		<<sumMT/numEntries<<setreal(6,1)<<sumFE/numEntries
		<<setreal(6,1)<<sumTot/numEntries<<endl;

	
}


double Reportar::totalIt(int As1,int As2,int MidT,int Final)
{
	
	double T;
    
	T=(As1*(1.0/2.0))+(As2*(1.0/3.0))+
	  (MidT*(2.0/10.0))+(Final*(6.0/10.0));

	return T;
}


String Reportar::getGrade(double function)
{
	 String GRADES[13]={"F",
						"D-","D","D+",
						"C-","C","C+",
						"B-","B","B+",
						"A-","A","A+"};
	int i=0; 	
	int mark= int (function);
	
	if (mark<=46)
	{
		GRADES[i];
	}
	else
	{
		i=((mark-42)/4);
		GRADES[i];
	}

	return GRADES[i];
}

#endif